// Learn cc.Class:
//  - https://docs.cocos.com/creator/manual/en/scripting/class.html
// Learn Attribute:
//  - https://docs.cocos.com/creator/manual/en/scripting/reference/attributes.html
// Learn life-cycle callbacks:
//  - https://docs.cocos.com/creator/manual/en/scripting/life-cycle-callbacks.html

cc.Class({
    extends: cc.Component,

    properties: {
        // 星星和主角之间的距离小于这个数值时，就会完成收集
        pickRadius: 0,
        // game 节点
        game: {
            default: null,
            type: cc.Node
        },
        //收集星星音效
        score_music : {
            default: null,
            type: cc.AudioClip
        },
    },

    // LIFE-CYCLE CALLBACKS:

    onLoad () {
        cc.log('star.js onLoad');
    },

    start () {
        cc.log('star.js start');
    },

    update (dt) {
        // 每帧判断和主角之间的距离是否小于收集距离
        if (this.node.opacity > 0 && 
               this.getPlayerDistance() < this.pickRadius) {
            // 调用收集行为
            this.onPicked();
            return;
        }else if(this.node.opacity <= 0) {
            // 当星星完全消失，调用 Game 脚本中的接口，生成一个新的星星;
            this.node.parent.getComponent("player").game_over();
            // 然后销毁当前星星节点
            this.node.destroy();
        }
        //设置星星消失的时间
        this.node.opacity -= 1;

    },

    getPlayerDistance: function () {
        // 根据 player 节点位置判断距离
        var playerPos = this.node.parent.getComponent("game").player.position;
        // 根据两点位置计算两点之间距离
        var dist = this.node.position.sub(playerPos).mag();
        return dist;
    },

    onPicked: function() {
        // 当星星被收集时，调用 Game 脚本中的接口，生成一个新的星星;
        this.node.parent.getComponent("game").spawnNewStar();
        // 当星星被收集时，播放音乐
        cc.audioEngine.play(this.score_music, false, 1);
        // 当星星被收集时，调用 Game 脚本的得分方法
        this.node.parent.getComponent("game").gainScore();
        // 然后销毁当前星星节点
        this.node.destroy();
    },
});
